package cn.stylefeng.guns.modular.gridsystem.temperature.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.gridsystem.entity.BizGateway;
import cn.stylefeng.guns.modular.gridsystem.enums.temp.TempConfigUtil;
import cn.stylefeng.guns.modular.gridsystem.enums.temp.TempDictType;
import cn.stylefeng.guns.modular.gridsystem.service.BizGatewayService;
import cn.stylefeng.guns.modular.gridsystem.temperature.entity.BizTemperatureChannel;
import cn.stylefeng.guns.modular.gridsystem.temperature.entity.BizTemperatureConfig;
import cn.stylefeng.guns.modular.gridsystem.temperature.mapper.BizTemperatureConfigMapper;
import cn.stylefeng.guns.modular.gridsystem.temperature.model.param.BizTemperatureConfigParam;
import cn.stylefeng.guns.modular.gridsystem.temperature.model.result.BizTemperatureConfigResult;
import cn.stylefeng.guns.modular.gridsystem.temperature.model.result.BizTemperatureRecordResult;
import cn.stylefeng.guns.modular.gridsystem.temperature.service.BizTemperatureConfigService;
import cn.stylefeng.guns.modular.gridsystem.temperature.utils.ConfigDictUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class BizTemperatureConfigServiceImpl extends ServiceImpl<BizTemperatureConfigMapper, BizTemperatureConfig> implements BizTemperatureConfigService {
    @Autowired
    private TempConfigUtil tempConfigUtil;

    @Override
    public Integer toAdd(BizTemperatureConfigParam param) {

        //设置采集端上报间隔
        //设置报警间隔
        //设置报警间隔
        //设置温差值
        List<String> tempDictTypes = Arrays.asList(TempDictType.getValues());
        BizTemperatureConfig bizTemperatureConfig = new BizTemperatureConfig();
        BeanUtil.copyProperties(param, bizTemperatureConfig);
        if (this.save(bizTemperatureConfig)) {
            if (tempDictTypes.contains(param.getDictType()))
                tempConfigUtil.setValue(TempDictType.getEnum(param.getDictType()),param.getDictValue());
            return bizTemperatureConfig.getId();
        }
        return null;
    }

    @Override
    public boolean toEditValue(BizTemperatureConfigParam param) {
        //设置采集端上报间隔
        List<String> tempDictTypes = Arrays.asList(TempDictType.getValues());
        boolean bool = this.lambdaUpdate().set(BizTemperatureConfig::getDictValue, param.getDictValue()).eq(BizTemperatureConfig::getId, param.getId()).update();
        if (bool){
            ConfigDictUtils.init();
            ConfigDictUtils.dictDatas.stream().filter(item -> item.getId().equals(param.getId())).forEach(item -> {
                if (tempDictTypes.contains(item.getDictType()))
                    tempConfigUtil.setValue(TempDictType.getEnum(item.getDictType()),param.getDictValue());
            });

        }
        return bool;
    }

    @Override
    public PageResult<BizTemperatureConfigResult> selectPage(BizTemperatureConfigParam param) {
        Page<BizTemperatureConfigResult> page = this.baseMapper.page(PageFactory.defaultPage(), param);
        return new PageResult<>(page);
    }
}
